package com.sky.mapper;

import com.github.pagehelper.Page;
import com.sky.dto.GoodsSalesDTO;
import com.sky.dto.OrdersPageQueryDTO;
import com.sky.entity.Orders;
import com.sky.vo.OrderVO;
import com.sky.vo.TurnoverReportAllVO;
import com.sky.vo.UserReportAllVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

@Mapper
public interface OrderMapper {

    void insert(Orders orders);

    /**
     * 查询超时的订单
     *
     * @param
     */
  @Select("select * from orders where status = #{status} and order_time <#{time}")
    List<Orders> getByStatusAndOrderTimeLT(Integer status, LocalDateTime time);

    void updateBatch(List<Orders> ordersList);

    Page<Orders> selectPage(OrdersPageQueryDTO ordersPageQueryDTO);

    /**
     * 根据id查询订单
     *
     * @param id
     * @return
     */
    @Select("select * from orders where id = #{id}")
    Orders selectById(Long id);

    /**
     * 更新订单表数据
     *
     * @param orders
     */
    void update(Orders orders);

    @Select("select count(*) from orders where status = #{status}")
    Integer countStatus(Integer status);

    /**
     * 根据id查询订单详情表
     * @param id
     */
    OrderVO getOrderById(Long id);
    //分页,条件查询订单及订单详情表
    Page<OrderVO> pageQueryOrderVo(OrdersPageQueryDTO ordersDTO);

  /**
   * 查询每天的营业额
   * @param map
   * @return
   */
  Double sumByMap(Map map);

  /**
   * 查询有订单的日期内的营业额及日期
   * @param map
   * @return
   */
  List<TurnoverReportAllVO> sumByMapAll(Map map);

  /**
   * 根据时间查询用户数量
   * @param map
   * @return
   */
  Integer sumUserByMap(Map map);

  /**
   * 查询有新增用户的日期及数量
   * @param map
   * @return
   */
  List<UserReportAllVO> sumUserReport(Map map);

  /**
   * 查询订单总数
   * @param map
   * @return
   */
  Integer sumOrderByMap(Map map);

  /**
   * 查询指定时间内的菜品和销量
   * @param map
   * @return
   */
  List<GoodsSalesDTO> getSalesTop10(Map map);

  /**
   * 获取给定日期前的总的用户数量
   * @return
   */
  @Select("select count(id) from user where create_time <= #{begin}")
  Integer getTotalUser(LocalDate begin);
}
